//
//  LZUserAccountViewModel.swift
//  Weibo
//
//  Created by lzing on 16/3/23.
//  Copyright © 2016年 lzing. All rights reserved.
//

import UIKit
import SDWebImage

class LZUserAccountViewModel: NSObject {
    // 单例
    static let sharedUserAccountViewModel: LZUserAccountViewModel = LZUserAccountViewModel()
    
    private override init() {
        super.init()
        // 从沙盒里面加载账号
        userAccount = loadUserAccount()
    }
    
    // 账号路径
    private let accountPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last!.stringByAppendingString("/account.plist")
    
    // 账号
    var userAccount : LZUserAccount?
    
    // 登录状态
    var userLoginStatus : Bool {
        get {
            return userAccount != nil
        }
    }
    
    // 加载access_token
    func loadAccessToken(code: String, completion: (error: NSError?) -> ()) {
        // 获取accessToken的url
        let urlString = "https://api.weibo.com/oauth2/access_token"
        // 拼接参数
        let parameters = [
            "client_id" : client_id,
            "client_secret" : client_secret,
            "grant_type" : "authorization_code",
            "code" : code,
            "redirect_uri" : redirect_uri
        ]
        
        // 发送请求
        LZNetworkTool.sharedNetworkTool.POST(urlString, parameters: parameters) { (result, error) -> () in
            if error != nil {
                // 发现错误
                completion(error: error)
                return
            }
            // 没有错误
            // 将accesstoken保存起来
            // 将网络返回的账号赋值给属性
            self.userAccount = LZUserAccount(dict: result!)
            // 保存到沙盒
            self.saveUserAccount()
            // 通知控制器保存完成
            completion(error:nil)
        }
    }
    
    ///  获取用户信息
    func loadUserInfo(completion:(error : NSError?) -> ()) {
        // 回调地址
        let url = "https://api.weibo.com/2/users/show.json"
        // 参数
        let parameters : [String : AnyObject] = [
            "access_token" : userAccount!.access_token!,
            "uid" : userAccount!.uid!
        ]
        
        // 发送请求
        LZNetworkTool.sharedNetworkTool.GET(url, parameters: parameters) { (result, error) -> () in
            if error != nil {
                completion(error : error)
                return
            }
            // 没有错误
            // 给账号赋值
            self.userAccount?.screen_name = result?["screen_name"] as? String
            self.userAccount?.avatar_large = result?["avatar_large"] as? String
            // 存到沙盒中
            self.saveUserAccount()

            completion(error : nil)
        }
    }
    
    /** 保存模型到沙盒*/
    private func saveUserAccount() {
        if userAccount != nil {
            // 保存
            NSKeyedArchiver .archiveRootObject(userAccount!, toFile: accountPath)
        }
    }
    
    /** 加载沙盒数据*/
    private func loadUserAccount() -> LZUserAccount? {
        let userAccount = NSKeyedUnarchiver.unarchiveObjectWithFile(accountPath) as? LZUserAccount
        // 如果读取出数据,并且不超时
        if userAccount != nil && userAccount?.expiresDate?.compare(NSDate()) == NSComparisonResult.OrderedDescending {
            return userAccount
        }
        return nil
    }
}
